ATVA'11 Recon benchmark structure
==================================

Archive structure 
=================

-- Benchmark-tag ... name of the benchmark
  |-- Keil	 ... C files for the Keil Compiler
    | -- bin	 ... compiled and linked hex file
  |-- SDCC	 ... C files for the SDCC compiler
    | -- bin	 ... compiled and linked hex file

Short program outline
=====================
1) Communication Link
  The application handles requests transmitted over a serial link (e.g., RS-232). Valid command sequences are stored as a table in program memory. A table-lookup together with pointer arithmetics determine the index of a function pointer table that holds the callback function to handle the request.
2) Keypad
  The application reads data from a bidirectional input port of the microcontroller, which is connected to several push-buttons; each button is associated to a certain handler function. The starting addresses of the handler functions are stored in an array of function pointers within the program memory.
3) Single Row Input
  The application reads data from a bidirectional input port of the microcontroller, which is connected to several push-buttons; each button is associated to a certain handler function. The starting addresses of the handler functions are stored in an array of function pointers within the program memory.
4) Task Scheduler
  The application implements a low-level task scheduler. It operates on a data structure that consists of an activation interval and a function pointer. An array holds one such entry for each task in the application (5 in the implementation).
1..4 are programs based on the article Nigel Jones, "Arrays of Pointers to Functions", 05/99, Embedded Systems Programming Magazine, online: www.rmbconsulting.us/Publications/PointerToFunction.pdf
5) Switch Case
  An application where the control flow of the program is controlled by a non-nested switch-case statement with 18 distinct cases and one default branch. A compact range of values to test causes the compiler to optimize the switch-case statement into a jump table.
6) Emergency Stop
  The application implements the emergency stop function block specified by the PLCopen consortium, which has defined safety-related aspects within the IEC 61131-3 development environment to support developers of Programmable Logic Controllers

Directory structure
=====================
atva11/
├── CommunicationLink
│   ├── Keil
│   │   ├── bin
│   │   │   └── commLink.hex
│   │   ├── defines.h
│   │   ├── handlers.c
│   │   └── source.c
│   └── SDCC
│       ├── bin
│       │   └── commLink.hex
│       └── commLink.c
├── EmergencyStop
│   ├── Keil
│   │   ├── bin
│   │   │   └── emergencyStop.hex
│   │   ├── defines.h
│   │   └── source.c
│   └── SDCC
│       ├── bin
│       │   └── emergencyStop.hex
│       └── emergencyStop.c
├── Keypad
│   ├── Keil
│   │   ├── bin
│   │   │   └── keypad.hex
│   │   ├── defines.h
│   │   ├── handlers.c
│   │   └── source.c
│   └── SDCC
│       ├── bin
│       │   └── keypad.hex
│       └── keypad.c
├── README
├── SingleRowInput
│   ├── Keil
│   │   ├── bin
│   │   │   └── singleRowInput.hex
│   │   ├── defines.h
│   │   ├── handlers.c
│   │   └── source.c
│   └── SDCC
│       ├── bin
│       │   └── singleRowInput.hex
│       └── singleRow.c
├── SwitchCase
│   ├── Keil
│   │   ├── bin
│   │   │   └── switchCase.hex
│   │   ├── defines.h
│   │   └── source.c
│   └── SDCC
│       ├── bin
│       │   └── switchCase.hex
│       └── switchCase.c
└── TaskScheduler
    ├── Keil
    │   ├── bin
    │   │   └── taskScheduler.hex
    │   ├── defines.h
    │   ├── handlers.c
    │   └── source.c
    └── SDCC
        ├── bin
        │   └── taskScheduler.hex
        └── timedTask.c
